package com.hsyt.pfc.support.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @Description: 小于1岁 ，根据出生日期计算月龄
 * @ClassName: MonthAgeLessOneUtil.java
 * @Package: com.hsyt.pfc.dct.utils
 * @Author: wangze@hsyuntai.com
 * @Date: 2016年7月21日 上午10:01:43
 * @Copyright: 版权归 Hundsun 所有 <ModifyLog>
 * @ModifyContent:
 * @Author:
 * @Date: </ModifyLog>
 */
public class MonthAgeLessOneUtil {

    /**
     * 获取年龄（小于1岁获取月份）
     *
     * @param idCardNo
     * @param birthday
     * @return
     */
    public static String getPatAgeStr(String idCardNo, String birthday) {

        if (StringUtil.isEmpty(birthday) && StringUtil.isEmpty(idCardNo)) {
            return null;
        }
        int patAge = 0; // 患者年龄
        if (StringUtil.isNotEmpty(idCardNo)) {
            patAge = IdCardUtils.getAgeByIdCard(idCardNo);
            birthday = IdCardUtils.getBirthByIdCard(idCardNo);
        }
        // 判断是否小于1岁
        boolean isLessOneAge = MonthAgeLessOneUtil.isGetMonthAge(birthday);
        if (isLessOneAge) {
            return MonthAgeLessOneUtil.getMonthAge(birthday) + "周";
        }
        // 没有身份证，但大于1岁的，按生日计算
        if (StringUtil.isEmpty(idCardNo)) {
            patAge = getAge(birthday);
        }
        return patAge + "岁";
    }

    /**
     * @param birthday
     * @return
     * @Description: 根据出生日期判断是否需要计算月龄
     * @Author: wangze@hsyuntai.com
     * @Date: 2016年7月21日 上午11:15:42
     */
    public static boolean isGetMonthAge(String birthday) {
        // if(出生日期 + 1年 > now) then 计算月龄 else IdCardUtils.getAgeByIdCard
        Date birthdayAddYear = DateUtil.addDate(
                DateUtil.str2Date(birthday, "yyyy-MM-dd"), 365); // 时间格式化字符串注意大小写！！ by hanjq
        boolean a = DateUtil.compareDate(DateUtil.date2Str(birthdayAddYear),
                DateUtil.date2Str(new Date()), DateUtil.FORMAT_DATE);
        return a;
    }

    /**
     * @param birthday
     * @return
     * @Description: 小于1岁儿童周龄计算 小于1周按1周算，大于1周的，取周龄，例：6天算1周龄，4周6天算4周龄
     * @Author: wangze@hsyuntai.com
     * @Date: 2016年7月21日 上午10:03:09
     */
    public static int getMonthAge(String birthday) {
        // 当前时间减去出生日期 获取毫秒数
        long ms = DateUtil.subDate(DateUtil.date2Str(new Date()), birthday);

        int ss = 1000;
        int mi = ss * 60;
        int hh = mi * 60;
        int dd = hh * 24;

        // 获取天数
        long day = ms / dd;
        int monthAge = (int) (day / 7 < 1 ? 1 : Math.floor(day / 7));
        return monthAge;
    }

    /**
     * 根据生日字符串，获取年龄
     *
     * @param birthday 生日字符串（yyyy-MM-dd）
     * @return 年龄
     * @auto wangze@hsyuntai.com
     * @date 2016/10/26 10:36
     **/
    public static int getAge(String birthday) {
        if (birthday == null) {
            return 0;
        }
        Calendar cal = Calendar.getInstance();

        try {
            // 根据年份计算年龄
            int currentYear = cal.get(Calendar.YEAR);
            int year = Integer.parseInt(birthday.substring(0, 4));
            int age = currentYear - year;

            // 根据月份和日期，修正年龄
            cal.add(Calendar.YEAR, -age);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String thatBirthday = sdf.format(cal.getTime());
            if (thatBirthday.compareTo(birthday) < 0) {
                age--;
            }
            return age;
        } catch (NumberFormatException e) {
            return 0;
        }
    }

    public static void main(String[] args) {
        System.out.println(getPatAgeStr("", "2015-11-24"));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(getPatAgeStr("", "2014-10-24"));
        System.out.println(getPatAgeStr("", "2014-10-26"));
        System.out.println(getPatAgeStr("", "2014-10-27"));
    }
}
